home *** CD-ROM | disk | FTP | other *** search
/ Aminet 30 / Aminet 30 (1999)(Schatztruhe)[!][Apr 1999].iso / Aminet / dev / c / flash-0.4.3.lha / flash-0.4.3 / Lib / program.h < prev    next >
C/C++ Source or Header  |  1999-02-21  |  4KB  |  179 lines

  1. /////////////////////////////////////////////////////////////
  2. // Flash Plugin and Player
  3. // Copyright (C) 1998 Olivier Debon
  4. // 
  5. // This program is free software; you can redistribute it and/or
  6. // modify it under the terms of the GNU General Public License
  7. // as published by the Free Software Foundation; either version 2
  8. // of the License, or (at your option) any later version.
  9. // 
  10. // This program is distributed in the hope that it will be useful,
  11. // but WITHOUT ANY WARRANTY; without even the implied warranty of
  12. // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  13. // GNU General Public License for more details.
  14. // 
  15. // You should have received a copy of the GNU General Public License
  16. // along with this program; if not, write to the Free Software
  17. // Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
  18. // 
  19. ///////////////////////////////////////////////////////////////
  20. #ifndef _PROGRAM_H_
  21. #define _PROGRAM_H_
  22.  
  23. #ifdef DUMP
  24. #include "bitstream.h"
  25. #endif
  26.  
  27. #include "swf.h"
  28. #include "character.h"
  29. #include "displaylist.h"
  30. #include "sound.h"
  31. #include "flash.h"
  32.  
  33. enum ControlType {
  34.     ctrlPlaceObject,
  35.     ctrlPlaceObject2,
  36.     ctrlRemoveObject,
  37.     ctrlRemoveObject2,
  38.     ctrlDoAction,
  39.     ctrlStartSound,
  40.     ctrlStopSound,
  41.     ctrlBackgroundColor
  42. };
  43.  
  44. enum PlaceFlags {
  45.     placeIsMove        = 0x01,
  46.     placeHasCharacter    = 0x02,
  47.     placeHasMatrix        = 0x04,
  48.     placeHasColorXform    = 0x08,
  49.     placeHasRatio        = 0x10,
  50.     placeHasName        = 0x20,
  51.     placeHasClip        = 0x40
  52. };
  53.  
  54. struct Control {
  55.     ControlType    type;
  56.  
  57.     // Place, Remove, Sound
  58.     Character    *character;
  59.     long         depth;
  60.  
  61.     // Place 1&2
  62.     PlaceFlags     flags;
  63.     Matrix         matrix;
  64.     Cxform         cxform;
  65.     long         ratio;
  66.     long         clipDepth;
  67.     char        *name;
  68.  
  69.     // BackgroundColor
  70.     Color         color;
  71.  
  72.     // DoAction
  73.     ActionRecord    *actionRecords;
  74.  
  75.     struct Control *next;
  76.  
  77.  
  78.     // Methods
  79.  
  80.     void addActionRecord( ActionRecord   *ar)
  81.     {
  82.         ar->next = 0;
  83.  
  84.         if (actionRecords == 0) {
  85.             actionRecords = ar;
  86.         } else {
  87.             ActionRecord *current;
  88.  
  89.             for(current = actionRecords; current->next; current = current->next);
  90.  
  91.             current->next = ar;
  92.         }
  93.     };
  94.  
  95.     Control()
  96.     {
  97.         actionRecords = 0;
  98.         cxform.aa = 1.0; cxform.ab = 0;
  99.         cxform.ra = 1.0; cxform.rb = 0;
  100.         cxform.ga = 1.0; cxform.gb = 0;
  101.         cxform.ba = 1.0; cxform.bb = 0;
  102.         ratio = 0;
  103.         clipDepth = 0;
  104.     };
  105.  
  106.     ~Control()
  107.     {
  108.         ActionRecord    *ar,*del;
  109.         for(ar = actionRecords; ar;)
  110.         {
  111.             del = ar;
  112.             ar = ar->next;
  113.             delete del;
  114.         }
  115.     };
  116. };
  117.  
  118. struct Frame {
  119.     char *label;
  120.     Control *controls;    // Controls for this frame
  121. };
  122.  
  123. enum MovieStatus {
  124.     MoviePaused,
  125.     MoviePlay
  126. };
  127.  
  128. class Program {
  129.  
  130.     DisplayList    *dl;
  131.     Frame        *frames;    // Array
  132.     long         nbFrames;
  133.     long           currentFrame;
  134.     long           nextFrame;
  135.     long         refresh;
  136.     int         sprite;
  137.     MovieStatus      movieStatus;
  138.     void        (*getUrl)(char *,char *, void *);
  139.     void        *getUrlClientData;
  140.     Sound        *currentSound;
  141.     long         settings;
  142.  
  143. public:
  144.     Program(long n);
  145.     ~Program();
  146.  
  147.     void     rewindMovie();
  148.     void     pauseMovie();
  149.     void     continueMovie();
  150.     void     nextStepMovie();
  151.     void     gotoFrame(long f);
  152.  
  153.     long     processMovie(GraphicDevice *, SoundMixer *);
  154.     long     nestedMovie(GraphicDevice *, SoundMixer *, Matrix *);
  155.     long     runFrame(GraphicDevice *, SoundMixer *, long f, long action=1);
  156.     long     handleEvent(GraphicDevice *, SoundMixer *, FlashEvent *);
  157.     long     doAction(ActionRecord *action, SoundMixer *);
  158.     void     setCurrentFrameLabel(char *label);
  159.     void     advanceFrame();
  160.     long     getFrame();
  161.     void     setCurrentFrame(long);
  162.     void     addControlInCurrentFrame(Control *ctrl);
  163.     void     setGetUrlMethod( void (*)(char *, char *, void *), void *);
  164.     void     modifySettings(long flags);
  165.     long     searchFrame(char *);
  166.  
  167.     Frame    *getFrames();
  168.     long     getNbFrames();
  169.  
  170.     DisplayList *getDisplayList();
  171.  
  172. #ifdef DUMP
  173.     void     dump(BitStream *bs);
  174. static  void     dumpActions(BitStream *bs, ActionRecord *actions);
  175. #endif
  176. };
  177.  
  178. #endif /* _PROGRAM_H_ */
  179.